package ar.com.sectorwine.dto;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import ar.com.sectorwine.entities.Empresa;
import ar.com.sectorwine.entities.Publicacion;
import ar.com.sectorwine.entities.Users;
import ar.com.sectorwine.segimiento.DetallePublicacionDTO;
import ar.com.sectorwine.services.EmpresasService;

@Component
public class DetallesPublicacionesDTOMapper {

	@Autowired
	private EmpresasService empresasService;

	public List<DetallePublicacionDTO> obtenerDetallesPublicacionesDTO(
			List<Publicacion> publicaciones, Users user, Long idEmpresa) {

		DetallePublicacionDTO detallePublicacionDTO;
		List<DetallePublicacionDTO> detalles = new ArrayList<DetallePublicacionDTO>();

		boolean resultado;

		for (Publicacion publicacion : publicaciones) {
			resultado = false;
			if (idEmpresa == null) {
				resultado = estaSuscripto(publicacion, user);
			} else {
				resultado = soloEmpresa(publicacion, idEmpresa);
			}

			if (resultado) {

				detallePublicacionDTO = new DetallePublicacionDTO();
				detallePublicacionDTO.setIdPublicacion(publicacion.getId()
						.toString());
				detallePublicacionDTO.setNombreEmpresa(publicacion.getEmpresa()
						.getRazonSocial());
				detallePublicacionDTO.setAvatar(publicacion.getEmpresa().getUrlAvatar());
				detallePublicacionDTO.setTitulo(publicacion.getTitulo());
				detallePublicacionDTO.setDescripcion(publicacion
						.getBreveDescripcion());
				detallePublicacionDTO.setUrlImagen(new ArrayList<String>());

				detallePublicacionDTO.setCuerpo(publicacion.getCuerpo());

				detallePublicacionDTO.setIdEmpresa(publicacion.getEmpresa()
						.getId().toString());

				detallePublicacionDTO.setIdEmpresaFuente(publicacion
						.getIdEmpresaFuente());
				if (publicacion.getIdEmpresaFuente() != null) {
					detallePublicacionDTO
							.setEmpresaFuenteNombre(empresasService
									.getEmpresa(
											publicacion.getIdEmpresaFuente()
													.toString())
									.getRazonSocial());
				}
				List<String> tags_split = publicacion.getTags();
				String tags_string = "";
				for (int i = 0; i < tags_split.size(); i++) {
					tags_string = tags_split.get(i) == "" ? "" : tags_split
							.get(i)
							+ (tags_string == "" ? "" : (", " + tags_string));

				}

				detallePublicacionDTO.setTags(tags_string);
				detallePublicacionDTO.setContadorReblog(publicacion.getContadorReblog());

				SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

				detallePublicacionDTO.setFecha(sdf.format(publicacion
						.getFechaPublicacion()));

				detalles.add(detallePublicacionDTO);
			}
		}
		return detalles;

	}

	private boolean soloEmpresa(Publicacion publicacion, Long idEmpresa) {
		if (publicacion.getEmpresa().getId() == idEmpresa) {
			return true;
		}
		return false;
	}

	public boolean estaSuscripto(Publicacion publicacion, Users user) {

		if (publicacion.getUsuarioCreador().getUsername()
				.equals(user.getUsername())) {
			return true;
		}

		Empresa empresa;

		if (user.getPerfilUsuario().getEmpresasSeguidas()
				.contains(publicacion.getEmpresa().getId())) {
			return true;
		}

		return false;
	}

}
